# 银行系统
UserList = [{"username": "leiming", "password": "123456", "islogin": "False", "balance": 100},
            {"username": "liming", "password": "123456", "islogin": "False", "balance": 100},
            {"username": "wangwu", "password": "123456", "islogin": "False", "balance": 100}]

userIndex = -1

# 用户登录状态
islogin = "False"


def infoSystem():
    # print("系统正在初始化")
    # 绘制界面
    print("—" * 31, end="")
    print("")

    for i in range(6):
        print("|", "|".rjust(60))
        if i == 3:
            print("|", "欢迎使用银行系统", "|".rjust(41))
            print("|", "祝工作愉快", "|".rjust(49))

    print("—" * 31, end="")
    print("")


# 初始选择项目的画面已经完成
def loadloginView():
    '''
    显示登录、注册、退出系统的选项界面
    选择项有：
    1、登录银行系统
    2、注册银行系统
    3、退出银行系统
    '''
    print("请选择你的项目：")

    print("—" * 31, end="")
    print("")
    for i in range(4):
        print("|", "|".rjust(60))
        if i == 1:
            print("|", "1、登录银行系统", "|".rjust(42))
            print("|", "2、注册银行系统", "|".rjust(42))
            print("|", "3、退出银行系统", "|".rjust(42))
    print("—" * 31, end="")
    print("")

    userchoose = int(input("请输入你的项目："))
    # 1 代表登录功能
    if userchoose == 1:
        # 调用登录功能
        login()
    # 2 代表注册功能
    elif userchoose == 2:
        # 调用了注册功能
        register()
    elif userchoose == 0:
        print("—" * 31, end="")
        print("")
        print("感谢使用银行系统,已退出系统!")
        print("—" * 31, end="")
        print("")
        exit()

    else:
        print("你输入的有误，请重新输入\n或者选择0退出系统")
        # 递归调用自身方法。
        loadloginView()


# 下面完成登录功能
def login():
    # 声明一下全局变量试试
    global UserList
    # global username
    global islogin
    global userIndex

    userinputname = input("请输入用户名：")
    userinputpassword = input("请输入密码：")

    for userdic in UserList:
        # print(userdic.get("username"))
        # 与用户输入的值进行比对
        if userinputname == userdic.get("username"):
            print("系统查询中……请稍等")
            # 输入的用户名相等
            if userinputpassword == userdic.get("password"):
                print("=" * 20)
                print("系统登录成功")
                userIndex = UserList.index(userdic)
                UserList[userIndex].update({"islogin": "True"})
                if userIndex == -1:
                    print("登录过程出现错误,系统已退出")
                    exit()
                printMainView()
                break
            else:
                print("输入密码错误，请重新输入")
                login()
                break
    else:
        print("=" * 20)
        print("用户名错误,请重新输入，或请注册新账户！")
        loadloginView();


def register():
    print("—" * 31, end="")
    print("")
    print("欢迎加入银行系统大家庭！")
    print("—" * 31, end="")
    print("")
    username = input("请输入你的姓名:")
    for userdic in UserList:
        if username == userdic.get("username"):
            print("—" * 31, end="")
            print("")
            print("糟糕,系统中存在同名的!\n换一个试试!")
            register()
            break

    password = input("请输入你的密码:")
    if len(UserList) == 9:
        print("你很有毅力,你注定成功!\n银行系统公司决定给你一笔奖励,资金已经到你账户,请拿走不谢!")
        userdic = {"username": username, "password": password, "islogin": "False", "balance": 100000000}
        UserList.append(userdic)

    userdic = {"username": username, "password": password, "islogin": "False", "balance": 0}
    UserList.append(userdic)

    print("—" * 31, end="")
    print("")
    print("感谢注册银行系统账户!")
    print("—" * 31, end="")
    print("")
    loadloginView()


def printMainView():
    '''
    要显示当前登录的账户是谁才行。
    要不就搞不清是谁登录了
    '''
    # global username
    print("显示主操作菜单界面")
    print("—" * 31, end="")
    print("")
    for i in range(4):
        print("|", "|".rjust(60))
        if i == 1:
            print("|", "1、查询余额", "|".rjust(48))
            print("|", "2、取款", "|".rjust(52))
            print("|", "3、存款", "|".rjust(52))
            print("|", "4、注销账户", "|".rjust(48))
    print("—" * 31, end="")
    print("")
    print("{:>8}:{:<10} {:>20}:{:<5}".format("账户名", UserList[userIndex].get("username"), "登录状态",
                                             UserList[userIndex].get("islogin")))
    print("—" * 31, end="")
    print("")

    useroperationid = int(input("请选择你的项目："))
    if useroperationid == 1:
        print("{:<}:{:<}".format("你的账户余额是", getuserbalance()))
        print("=" * 20)
        goOnOrNot(input("继续还是退出?(Y/N):"))
    elif useroperationid == 2:
        getcash(int(input("请输入取款金额：")))
        print("=" * 20)
        goOnOrNot(input("继续还是退出?(Y/N):"))
    elif useroperationid == 3:
        pushCash(int(input("请输入存款金额：")))
        print("=" * 20)
        goOnOrNot(input("继续还是退出?(Y/N):"))
        pass
    elif useroperationid == 4:
        goOnOrNot("N")
    else:
        print("你的有误，请重新输入")
        printMainView()


def getuserbalance():
    '''
    该方法是查询账户余额
    '''

    return UserList[userIndex].get("balance")


def getcash(cashcount):
    '''
    该方法是用来完成取款，
    用户输入多少，取款成功的话就要有提示。
    取款不成功的话，也要有提示
    这里面还有一个问题是，不能出现负数。不能没钱还让用户取
    '''
    # 首先查询当前用户的余额
    balance = getuserbalance()

    if balance < cashcount:
        print("取款失败，余额不足")
        print("{:<}:{:<}".format("当前账户余额是", balance))
    else:
        print("{:}:{:}".format("取款金额", cashcount))
        print("{:<}:{:<}".format("账户余额是", modifyMoney(cashcount * (-1))))


def pushCash(cashcount):
    '''
    完成存钱的功能
    在完成存款的功能后,这个就很简单了
    '''
    print("{:<}:{:<}".format("账户余额是", modifyMoney(cashcount)))


def modifyMoney(count):
    '''
    改方法用户实现用户账户金额的修改
    不管是存钱也好,还是取钱也好
    这个方法需要就是保证修改账户的金额的
    处理方式是:
        当前账户加上传入的数值,并修改结果储存,并返回结果值.
    '''
    UserList[userIndex]["balance"] = UserList[userIndex]["balance"] + count
    return UserList[userIndex]["balance"]


def goOnOrNot(choice):
    '''
    该方法是询问用户是继续还是退出
    退出的话,严格意义上就要清除当前用户的登录信息
    退出到系统外部进行等待
    '''
    if choice == "Y":
        printMainView()

    elif choice == "N":
        print("已注销登录")
        userIndex = -1
        islogin = "False"
        loadloginView()
    else:
        print("输入有误,请重新选择!")
        goOnOrNot(input("继续还是退出?(Y/N):"))
        print("=" * 20)


# 显示系统欢迎界面
infoSystem()

# 进入登陆及注册选项界面
loadloginView()